package org.centsuse.intention_spring.invention.entities.model;

import dev.langchain4j.model.chat.ChatLanguageModel;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.centsuse.intention_spring.invention.config.scenes.processor.SceneProcessor;
import org.centsuse.intention_spring.invention.config.scenes.SceneConfig;
import org.centsuse.intention_spring.invention.factory.ModelFactory;
import org.centsuse.intention_spring.invention.factory.SceneFactory;
import org.springframework.util.StringUtils;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Logger;

@Slf4j
@Data
public class ChatbotModel {

//    private static final Logger logger = Logger.getLogger(ChatbotModel.class.getName());
//
//    /** 相似度 */
//    private static final float RELATED_INTENT_THRESHOLD = 0.5f; // 从配置读取
//
//    /** 场景模板 */
//    private Map<String, SceneConfig> sceneTemplates;
//
//    /** 当前意图 */
//    private String currentPurpose = "";
//
//    public ChatbotModel(Map<String, SceneConfig> sceneTemplates) {
//        this.sceneTemplates = sceneTemplates;
//    }
//
//    /**
//     * @desc 判断当前用户输入是否与上一轮对话关联
//     * @param userInput 用户输入
//     * @return boolean
//     */
//    public boolean isRelatedToLastIntent(String userInput) {
//        log.info("[ChatbotModel][isRelatedToLastIntent], userInput: {}", userInput);
//        if (currentPurpose.isEmpty()) {
//            return false;
//        }
//
//        String currentSceneDesc = sceneTemplates.get(currentPurpose).getDescription();
//        String prompt = String.format(
//                "判断当前用户输入内容与当前对话场景的关联性:%n%n当前对话场景: %s%n当前用户输入: %s%n%n这两次输入是否关联（仅用小数回答关联度，得分范围0.0至1.0）",
//                currentSceneDesc, userInput
//        );
//        log.info("[ChatbotModel][isRelatedToLastIntent], prompt: {}", prompt);
//        String result = sendMessage(prompt);
//        log.info("[ChatbotModel][isRelatedToLastIntent], result: {}", result);
//        return extractFloat(result) > RELATED_INTENT_THRESHOLD;
//    }
//
//    /**
//     * @description  重新生成场景意图
//     * @param userInput 用户输入
//     */
//    public void recognizeIntent(String userInput) {
//        StringBuilder optionsPrompt = new StringBuilder();
//        Map<String, String> purposeOptions = new LinkedHashMap<>();
//        int index = 1;
//
//        for (Map.Entry<String, SceneConfig> entry : sceneTemplates.entrySet()) {
//            String key = String.valueOf(index);
//            SceneConfig sceneConfig = entry.getValue();
//            if (null == sceneConfig) {
//                continue;
//            }
//            purposeOptions.put(key, entry.getKey());
//            optionsPrompt.append(String.format("%s. %s - 请回复%s%n", key, sceneConfig.getDescription(), key));
//            index++;
//        }
//        optionsPrompt.append("0. 其他场景 - 请回复0");
//        log.info("[ChatbotModel][recognizeIntent], optionsPrompt: {}", optionsPrompt);
//
//        String fullPrompt = String.format(
//                "有下面多种场景，需要你根据用户输入进行判断，只答选项%n%s%n用户输入：%s%n请回复序号：",
//                optionsPrompt, userInput
//        );
//        log.info("[ChatbotModel][recognizeIntent], fullPrompt: {}", fullPrompt);
//
//        String userChoice = sendMessage(fullPrompt);
//        logger.fine(() -> "[ChatbotModel][recognizeIntent], purposeOptions: " + purposeOptions);
//        logger.fine(() -> "[ChatbotModel][recognizeIntent], userChoice: " + userChoice);
//
//        String choice = extractContinuousDigits(userChoice);
//        if (!StringUtils.isEmpty(choice) && !choice.equals("0")) {
//            currentPurpose = purposeOptions.getOrDefault(choice, "");
//        }
//        if (!currentPurpose.isEmpty() && null != sceneTemplates.get(currentPurpose)) {
//            log.info("[ChatbotModel][recognizeIntent], 用户选择了场景 {}", sceneTemplates.get(currentPurpose).getName());
//        } else {
//            log.info("[ChatbotModel][recognizeIntent], 无效的选项，请重新选择。");
//        }
//    }
//
//    /**
//     * @description 根据名称获取场景处理器
//     * @param sceneName 场景名称
//     * @return SceneProcessor 场景处理器
//     * @throws Exception 异常
//     */
//    private SceneProcessor getProcessorForScene(String sceneName) throws Exception {
//        SceneProcessor processor = SceneFactory.getProcessor(sceneName);
//        if (null == processor) {
//            throw new IllegalArgumentException("未找到名为" + sceneName + "的场景配置");
//        }
//        log.info("[ChatbotModel][recognizeIntent], sceneName is {}, processor is {}", sceneName, processor.getClass().getName());
//        return processor;
//    }
//
//    /**
//     * @description 问题处理
//     * @param userInput 用户输入
//     * @return String 结果处理
//     */
//    public String processMultiQuestion(String userInput) {
//        log.info("[ChatbotModel][processMultiQuestion], userInput: " + userInput);
//        try {
//            if (!isRelatedToLastIntent(userInput)) {
//                recognizeIntent(userInput);
//            }
//            logger.info(() -> "[ChatbotModel][processMultiQuestion], currentPurpose: " + currentPurpose);
//
//            // 如果场景模板中包含当前的意图场景
//            // 获取场景执行器进行处理
//            if (sceneTemplates.containsKey(currentPurpose)) {
//                SceneProcessor processor = getProcessorForScene(currentPurpose);
//                return processor.process(userInput, null);
//            }
//            // 定义结果类 TODO
//            return "未命中场景";
//        } catch (Exception e) {
//            logger.severe("[ChatbotModel][processMultiQuestion], 场景处理异常: " + e.getMessage());
//            return "场景处理异常";
//        }
//    }
//
//    // 以下是工具方法（需要Java实现）
//
//    /**
//     * @description 发送消息给大模型
//     * @param prompt prompt
//     * @return String
//     */
//    private String sendMessage(String prompt) {
//        log.info("[ChatbotModel][sendMessage], prompt: " + prompt);
//        // TODO
//        ChatLanguageModel chatLanguageModel = ModelFactory.getModel("ollama");
//        return chatLanguageModel.chat(prompt); // 模拟返回值
//    }
//

}

